<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    /*   原理:数组的下标是唯一的
         可以把原数组中的每个元素作为新数组的下标
 
         list = [           ]
                     1   2   3
     
     
     */



    var arr = [1, 2, 3, 3, 2, 1, 3, 1, 2, 1, 3, 2, 100];

    var list = [];

    for (var i = 0; i < arr.length; i++) {
        var item = arr[i]; //原数组中的每个元素
        // list[item]    把原数组中的每个元素作为新数组的下标
        //  list[item]  => 对应下标取值 ,取一个不存在的下标 => undefined
        //                 对应下标赋值,对一个不存在的下标赋值 => 新增该下标到数组中

        if (list[item] != undefined) {  // 有值
            // list[item] = list[item] + 1;
            list[item]++;
        } else {
            list[item] = 1;
        }

    }
    console.log(list);


    var str = "";
    for (var i in list) {
        console.log(i, list[i]);
        str += i + "" + list[i];
    }
    console.log(str);

    // 此方法的缺点 => 数组的下标是字符串类型 =>  把原数组中的每个元素作为新数组的下标(隐式转化为字符串类型) => 取值时都是字符串类型  (可以使用Map数据结构)




</script>

</html>